import { syslogin, sysprofile, sysuser } from '@/api/user.js'
import { Message } from 'element-ui'
// 导入动态路由
import { asyncRouter, constantRoutes } from '@/router/index'
import router from '@/router'
// 导入重置路由方法
import { resetRouter } from '@/router/index.js'
// import { setToken } from '@/utils/auth'
const state = {
  username: '校招',
  token: '',
  userinfo: ''
}
const mutations = {
  settoken(state, value) {
    state.token = value
  },
  setUserInfo(state, value) {
    state.userinfo = value
  },
  // 删除token和用户信息
  loginout(state) {
    state.token = ''
    state.userinfo = ''
    // 登录完上一个用户的时候,动态路由依然存在,所以在每一次退出时都要需要我们重新配置一下路由
    // router中有默认配置好的重置路由方法,这里只需要调用方法就好
    resetRouter()
  }
}
const actions = {
  // 发送异步请求登录接口
  async toLogin(store, value) {
    const res = await syslogin(value)
    store.commit('settoken', res.data)
    // console.log(typeof res.data.data) // undefined
    // console.log(res.data.data) // undefinted类型
    Message.success(res.message)
    // console.log(res)
  },
  // 定义一个请求用户信息
  async getUserInfo(store) {
    // 获取用户基本信息
    const res = await sysprofile()
    console.log(res)
    // 获取用户详细信息
    const res2 = await sysuser(res.data.userId)
    console.log(res2)
    // 把获取的两个接口对象合并为一个对象
    const info = Object.assign({}, res.data, res2.data)
    store.commit('setUserInfo', info)
    // 合并对象用对象的内置方法Object.assign()来合并对象
    // store.commit('setUserInfo', Object.assign({}, res.data, res2.data))
    // 通过获取用户信息的权限设置字段与自定义的动态路由匹配,把匹配到的动态路由通过router.addRoute()添加到路由中
    const Inforouter = asyncRouter.filter(item => {
      return info.roles.menus.includes(item.meta.name)
    })
    // -------重点------
    // 把当在浏览器搜索框中输入地址找不到页码跳转到404页面重定向路由通过动态路由添加
    Inforouter.push({ path: '*', redirect: '/404', hidden: true })
    // 把动态生成的路由,添加到全局厂库
    store.commit('routes/setRoutes', [...constantRoutes, ...Inforouter], { root: true })
    console.log(Inforouter)
    // 添加到动态路由中去
    router.addRoutes(Inforouter)
  }
}
const getters = {}
export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
